package com.javaGather.demo;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Vector;

public class Test {
    public static void main(String[] args) {

        /**
         * 底层基于数组
         * ArrayList根据index下标查询效率非常高，不是查询效率高
         * 增加与删除效率较低
         * ArrayList 的get方法，根据index查询  时间复杂度o(1)
         * 懒加载形式初始化
         * ArrayList 底层默认初始化数组容量10
         * 动态扩容机制：常见一个新的数组，长度为原来的1.5倍，原数组元素迁移至新数组
         * 删除操作会将之后的元素往前移动
         */


        /**
         * 懒加载形式初始化
         */
        //创建一个新数组，数组容量为0
        ArrayList<String> arrayList = new ArrayList<>();
        //执行add方法，需要判断是否需要扩容，不需要则初始化容量为10的数组，在执行添加
        //若添加第十一个元素，此时需要扩容，即原容量的1.5倍大小，原来数组拷贝到新数组
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("C");

        //先判断下标是否越界，在根据index查询
        String s = arrayList.getFirst();
        System.out.println(s);


        //查找到删除的圆度index下标之后的往前移动
        String remove = arrayList.remove(1);
        System.out.println(remove);

        System.out.println(arrayList.get(1));


        /**
         * ArrayList的竞争对手
         * 底层基于数组 线程安全
         * List接口下子类
         * 默认初始化容量 10，每次扩容为原来容量的2倍
         * 可设置参数   15：数组初始化容量   15：每次扩容大小
         */

        /**
         * 构造函数初始化
         */
        Vector<String> strings = new Vector<>(15, 15);
        strings.add("A");
        strings.add("B");
        System.out.println(strings.get(1));


    }
}
